home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / proboard / pb_215.zip / TEXTSRCH.C < prev    next >
C/C++ Source or Header  |  1996-05-05  |  2KB  |  134 lines

  1. #include "pb_sdk.h"
  2.  
  3. bool
  4. find_string(char *search,char *text)
  5. {
  6.    int slen,l,i;
  7.  
  8.    slen = strlen(search);
  9.  
  10.    l = strlen(text);
  11.  
  12.    for(i=0;i<=l-slen;i++)
  13.       if(!memicmp(&text[i],search,slen))
  14.       {
  15.          return TRUE;
  16.       }
  17.  
  18.    return FALSE;
  19. }
  20.  
  21. void
  22. showbusy()
  23. {
  24.    static int x = 0;
  25.    static char s[] = "|\\-/";
  26.  
  27.    putchar('\b');
  28.    putchar(s[x]);
  29.  
  30.    x = ++x % 4;
  31. }
  32.  
  33. void
  34. main(int argc,char *argv[])
  35. {
  36.    int i,result;
  37.    MESSAGE msg;
  38.    MSGAREA ma;
  39.    char search[30];
  40.    int area = CurUser->msgArea;
  41.    char *text;
  42.  
  43.    if(argc > 1) area = atoi(argv[1]);
  44.  
  45.    if(area)
  46.    {
  47.       if(!ReadMsgArea(area,&ma))
  48.       {
  49.          Log(LOG_FRIEND,"Can't read message area %d",area);
  50.          return;
  51.       }
  52.    }
  53.    else
  54.    {
  55.       printf("\n\n\6Text search not available in combined mode!"
  56.             "\n\n\7Press \3[Enter]\7 to continue.\t");
  57.  
  58.       return;
  59.    }
  60.  
  61.    printf("\n\f\n\6Text Search (\3%s\6)\n"
  62.                "\7───────────\n\n",ma.name);
  63.  
  64.    printf("\7Search string: \3");
  65.  
  66.    Input(search,29,INPUT_UPALL);
  67.  
  68.    if(search[0] == '\0') return;
  69.  
  70.    UnMarkAllMessages();
  71.  
  72.    printf("\n\n\7Press [\3S\7] to abort search. Searching for '\3%s\7'...\6  ",search);
  73.  
  74.    text = malloc(4000);
  75.  
  76.    result = FirstMessage(&msg,area,1,1);
  77.  
  78.    for(i=0;result;)
  79.    {
  80.       showbusy();
  81.  
  82.       CreateMessageTextString(&msg,text,4000);
  83.  
  84.       if(toupper(PeekChar()) == 'S') break;
  85.  
  86.       if(find_string(search,text))
  87.       {
  88.          MarkMessage(msg.area,msg.id);
  89.  
  90.          i++;
  91.       }
  92.  
  93.       result = NextMessage(&msg,area,1);
  94.    }
  95.  
  96.    free(text);
  97.  
  98.    if(i)
  99.    {
  100.       char c;
  101.  
  102.       printf("\n\n\3%d \7messages with matching text found & marked.\n\n",i);
  103.  
  104.       for(;;)
  105.       {
  106.          printf("\7Action? \6[\3R\6]ead - [\3L\6]ist - [\3Q\6]uit\7 : ");
  107.  
  108.          c = WaitKeys("RLQ\r");
  109.  
  110.          putchar(c);
  111.          putchar('\n');
  112.  
  113.          if(c == 'Q') break;
  114.          if(c == 'R')
  115.          {
  116.             ReadMarkedMessages();
  117.             break;
  118.          }
  119.          if(c == 'L')
  120.          {
  121.             ListMarkedMessages();
  122.          }
  123.  
  124.          putchar('\n');
  125.       }
  126.    }
  127.    else
  128.    {
  129.       puts("\n\n\6No messages found. \7Press \3[Enter]\7 to continue.\t");
  130.    }
  131. }
  132.  
  133.  
  134.